3 de enero de 2019

INTRODUCCIÓN

This is an R Markdown presentation. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

OBJETIVOS

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document.

REVISIÓN LITERARIA

¿QUÉ ES LA CIENCIA DE DATOS?

  • La Ciencia de Datos es un área de trabajo interdisciplinar que incluye procesos para recopilar, preparar, analizar, visualizar y modelizar datos que permitan generar conocimiento útil para comprender problemas complejos y ayudar en la toma de decisiones (Casillas 2016).

  • Un científico de datos es aquella persona con dominio en matemáticas, estadísitica, computación y tecnología, perfilandose actualmente como una de las profesiones del futuro (Good Rebels).

¿QUÉ ES R?

  • R fue creado en 1992 en Nueva Zelanda por Ross Ihaka y Robert Gentleman basandose en la sintaxis del lenguaje S desarrollado principalmente por John Chambers en Bell Laboratories y Scheme desarrollado por por Guy L. Steele y Gerald Jay Sussman (Ihaka 1998).

  • R es un lenguaje de programación interpretado, de distribución libre, bajo Licencia GNU, y se mantiene en un ambiente para el cómputo estadístico y gráfico, actualmente ampliamente aplicado para el procesamiento de datos en ciencias (Santana y Farfán 2014).

  • R no es un sistema estadístico sino un ambiente en el que se aplican técnicas estadísticas, este software corre en distintas plataformas Linux, Windows, MacOS, e incluso en PlayStation 3 (Santana y Farfán 2014).

CARACTERISTICAS DE R

  • El sistema R esta dividido en dos partes conceptuales: El sistema base de R, que es el que puedes bajar de CRAN, y en todo lo demás, principalmente paquetes modulares.

  • La capacidad de gráficos de R es muy sofisticada. Existe paquetería para graficar, crear y manejar shapefiles; manipular y crear datos en distintos formatos como netCDF, csv, xlsx, tiff, etc.

¿QUÉ ES RStudio?

  • RStudio es un entorno de desarrollo integrado (IDE) para el lenguaje R, disponible para Windows, Mac, Linux y en casi todos los sistemas operativos.

  • Algunas ventajas de usar RStudio son : es libre, nos permite abrir varios scripts a la vez, nos permite ejecutar pedazos de código de los scripts, disponibilidad de autocompletado de código, etc.

  • Se puede descargar desde los siguientes enlaces : R v3.5.2 y RStudio

CARACTERÍSTICAS DE RSTUDIO

PAQUETES DE R

Función Acción
library() Lista de paquetes instalados
install.packages(“Nombre_del_paquete”) Instalación de un paquete
library(Nombre_del_paquete) Cargar un paquete a la sesión
search() Lista de paquetes instalados y cargados a la sesión
.libPaths() Directorio en el que ‘R’ almacena y busca los paquetes

AYUDA EN R

R dispone de un buen sistema de ayuda , lo que nos ayudará a obtener información de cualquier función en específico, caracter o palabra.

Función Acción
help() Muestra una ventana de ayuda general sobre ‘R’
help.start() Arranca un manual de ayuda completo en formato html, utilizando el navegador del sistema
help(Nombre) o ?Nombre Muestra una ventana de ayuda sobre una función
help.search(“Nombre”) Muestra un listado de contenidos acerca de una función, caracter y palabra

SINTAXIS DE R

EJEMPLO DE UN COMENTARIO :

# LOS COMENTARIOS EN "R" EMPIEZAN CON EL CARÁCTER '#'
# -----------------------------------------------------

LA FORMA EN LA QUE SE ASIGNA UN VALOR A UNA VARIABLE ES:

u <- 5

LA FUNCIÓN ‘print’ NOS AYUDARA A IMPRIMIR EL VALOR DE LA VARIABLE EN LA CONSOLA:

print(u) 
## [1] 5

TAMBIÉN SE PUEDE IMPRIMIR SU VALOR DIGITANDO LA VARIABLE :

u
## [1] 5

‘R’ FUNCIONA COMO UNA CALCULADORA, EJEMPLO :

((5*5+3+5)^2) + 5/2
## [1] 1091.5
log((1/pi)* 5) #Logaritmo neperiano
## [1] 0.464708

v <- 1/Inf #Divide un número por Infinito
v
## [1] 0
w <- 0/0 ; v # Indeterminado
## [1] 0
p = 758.9 # Presión en mmHg
patm = p*(1/760.0021) ; patm # Presión en atmósferas
## [1] 0.9985499

OPERACIONES MATEMÁTICAS EN R

TIPOS DE DATOS EN R

  • Todas las cosas que manipula R se llaman objetos, por ello se dice que R esta orientado a objetos (Santana y Farfán 2014).

  • Los objetos son estructuras que combinan datos y funciones que operan sobre ellos y son muy útiles en un entorno como R (Gil 2018).

  • En general, cada tipo de objeto viene definido por una serie de atributos. Las funciones genéricas (como por ejemplo summary o plot) reconocen estos atributos y llevan a cabo distintos tipos de acciones en función del tipo de objeto (Amazon AWS 2019).

TIPOS DE DATOS EN R

Clases atómicas Descripción Ejemplo
Character Cadenas de caracteres cimma <- “minería”
Numeric Números reales g <- 9.8
Integer Números enteros edad <- 20L
Complex Números complejos u <- 5 + 2i
logical Lógicos o booleanos v <- FALSE
NA Datos perdidos o faltantes w <- NA
NaN Datos indeterminados z <- NaN

ESTRUCTURA DE DATOS EN R

Objetos Tipos Varios Tipos
Vector Numérico, caracter, complejo o lógico NO
Factor Numérico o caracter NO
Array Numérico, caracter, complejo o lógico NO
Matrix Numérico, caracter, complejo o lógico NO
Data frame Numérico, caracter, complejo o lógico SI
ts Numérico, caracter, complejo o lógico SI
List Numérico, caracter, complejo, lógico, función, expresión, etc. SI

ESTRUCTURA DE DATOS EN R

VECTOR

  • Cada uno de las clases de objetos más simples o atómicas no se encuentran ni se manejan de manera aislada, sino encapsulados dentro de la clase de objeto más básica del lenguaje R: el vector (Santana y Farfán 2014).

  • Un vector puede contener cero o más objetos, pero todos de la misma clase (Santana y Farfán 2014).

c(5,7,9,-15) # Creación de un vector sin asignarlo a una variable
## [1]   5   7   9 -15

u <- c(5,7,9,-15) # Creación de un vector asignandolo a una variable
card <- c("E","W","N","S")

assign("w", c(5,7,9,-15)) # La función 'assign' asigna un vector a una variable
print(u); print(v) ; print(w)
## [1]   5   7   9 -15
## [1] 0
## [1]   5   7   9 -15

NOTA: La impresión del vector se hace en un renglón que comienza con el símbolo ’[1]’, indicando con ello que el primer elemento del renglón corresponde al primer elemento del vector.

CREACIÓN DE VECTORES A PARTIR DE PATRONES O SECUENCIAS :

v <- vector("integer", 0)
v # Un vector de enteros sin elementos
## integer(0)

w <- vector("numeric", 5)
w # Un vector de tres ceros
## [1] 0 0 0 0 0

EL OPERADOR ’:’ GENERA UN VECTOR A PARTIR DE UNA SECUENCIA DE ENTEROS :

x <- 50:80 ; y = pi:7
print(x); class(x) ; print(y) 
##  [1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [24] 73 74 75 76 77 78 79 80
## [1] "integer"
## [1] 3.141593 4.141593 5.141593 6.141593

LA FUNCIÓN seq() PERMITE GENERAR MAYOR VARIEDAD DE SECUENCIAS NUMÉRICAS :

u <- seq(from = 2, to = 19, by = 2)
print(u) # secuencia desde 2 hasta 18 de 2 en 2
## [1]  2  4  6  8 10 12 14 16 18

v <- seq(from = 3, by = 3, length.out = 8)
print(v) # secuencia de 8 números iniciando desde 3 y de 3 en 3
## [1]  3  6  9 12 15 18 21 24

LA FUNCIÓN rep() PERMITE REPETIR UNA SECUENCIA DE NÚMEROS VARIAS VECES :

v <- c(pi, -3, 1+3i)
w <- rep(v, times = 2)
print(w) ; class(w)
## [1]  3.141593+0i -3.000000+0i  1.000000+3i  3.141593+0i -3.000000+0i
## [6]  1.000000+3i
## [1] "complex"

LA FUNCIÓN c() PERMITE CONSTRUIR VECTORES A PARTIR DE OTROS :

u <- c(3, 4, 5)
v <- c(5, 4, 3)
w <- c(u, v)

ACCESO A UN ELEMENTO INDIVIDUAL DE UN VECTOR:

u <- c(18, 75, -2.33, 72)
u[3] # El cuarto elemento
## [1] -2.33

u[4]+u[2] # La suma del cuarto y segundo elementos de 'u'
## [1] 147

PONER NOMBRES A LOS ELEMENTOS INDIVIDUALES DE UN VECTOR :

temp <- c(28, 29, 29, 30) #Temperatura ambiente
names(temp) <- c("a", "b", "c", "d")       # OTRA FORMA :  temp <- c(a=28, b=29 ....

temp
##  a  b  c  d 
## 28 29 29 30

temp["b"]
##  b 
## 29

temp["b"] <- 28
temp
##  a  b  c  d 
## 28 28 29 30

OPERACIONES MATEMÁTICAS CON VECTORES

v <- 4 + 34 + 2      # Resulta en un vector de longitud 1
v
## [1] 40

v <- c(21, 13) - c(4, 17)     # Resulta en un vector de longitud 2
v
## [1] 17 -4

v <- c(2, 3, 4) * c(2, 1, 3)     # Resulta en un vector de longitud 3
v
## [1]  4  3 12

v <- c(1, 2, 3, 4)^(4:1)     # Eleva a potencias 4,3,2,1
v
## [1] 1 8 9 4

MANEJO DE FUNCIONES TRIGONOMÉTRICAS

# Para obtener el seno de 30, 45 y 60 grados:

# Primero se hace la conversión a radianes

angulos <- c(30, 45, 60) * (pi/180)
angulos # En radianes
## [1] 0.5235988 0.7853982 1.0471976

# Luego se aplica la función trigonométrica
# sin() , cos() , tan() ....

senos <- sin(angulos)
senos
## [1] 0.5000000 0.7071068 0.8660254

MATRIZ

  • Es una estructura de datos bidimensional (DATAMENTOR 2018).

  • La matriz es similar al vector, pero adicionalmente contiene el atributo: dim (dimensión) (DATAMENTOR 2018). Este atributo es un vector entero de dos elementos : el número de renglones y el número de columnas que componen a la matriz (Santana y Farfán 2014).

ARRAY

  • Un Array es una estructura de datos. Puede ser de 1D (por ejemplo, números, cadenas, etc.), 2D (por ejemplo, información de color de píxeles de una imagen), 3D (por ejemplo, tabla de datos) o cualquier n Dimensiones (QUORA 2015).

  • Se crea utilizando la función array (), usando vectores como entrada y el parámetro dim.

# CREACIÓN DE DOS VECTORES DE DIFERENTES LONGITUDES
vector1 <- c(54,-8,4)
vector2 <- c(1,7,18,14,-4,15.5)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# LOS VECTORES ANTERIORES SERÁN LA ENTRADA DE NUESTRO 'ARRAY'
result <- array(c(vector1,vector2),dim = c(3,3,2),
          dimnames = list(row.names,column.names,matrix.names))

print(result)

IMPRESIÓN DEL ARRAY :

## , , Matrix1
## 
##      COL1 COL2 COL3
## ROW1   54    1 14.0
## ROW2   -8    7 -4.0
## ROW3    4   18 15.5
## 
## , , Matrix2
## 
##      COL1 COL2 COL3
## ROW1   54    1 14.0
## ROW2   -8    7 -4.0
## ROW3    4   18 15.5

CONSTRUCCIÓN DE MATRICES :

m <- 1:20 # Un vector con 20 números
dim(m) <- c(4, 5) # 4 renglones y 5 columnas
class(m); m
## [1] "matrix"
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20

#LAS DIMENSIONES TAMBIÉN SE PUEDEN CAMBIAR
dim(m) <- c(5, 4) ; m
##      [,1] [,2] [,3] [,4]
## [1,]    1    6   11   16
## [2,]    2    7   12   17
## [3,]    3    8   13   18
## [4,]    4    9   14   19
## [5,]    5   10   15   20

#SELECCIÓN DE UN ELEMENTO (FILA Y COLUMNA)
 m[4,2]
## [1] 9
#SELECCIÓN DE UN ELEMENTO (POR POSICIÓN)
m[7]
## [1] 7
#SELECCIONAR LOS ELEMENTOS DE UNA COLUMNA O FILA
m[3, ] 
## [1]  3  8 13 18

m[,3 ]
## [1] 11 12 13 14 15

class(m[, 3])
## [1] "integer"

#ASIGNAR NOMBRES A FILAS Y COLUMNAS
rownames(m) <- c("uno", "dos", "tres", "cuatro", "cinco")
colnames(m) <- c("a", "b", "c", "d") ; m
##        a  b  c  d
## uno    1  6 11 16
## dos    2  7 12 17
## tres   3  8 13 18
## cuatro 4  9 14 19
## cinco  5 10 15 20

n <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
n
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12

LAS FUNCIONES rbind() y cbind() SE PUEDEN UTILIZAR PARA CONSTRUIR MATRICES :

u <- rbind(c(1.5, 3.2, -5.5), c(0, -1.1, 60))
u
##      [,1] [,2] [,3]
## [1,]  1.5  3.2 -5.5
## [2,]  0.0 -1.1 60.0

UNA MANERA FÁCIL DE CREAR MATRICES :

v <- matrix(1:6, 3, 2) ; v
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6

LA MULTIPLICACIÓN MATRICIAL SE HACE CON EL OPERADOR ’%*%’ :

n <- matrix(1:6, 3, 2)
m <- rbind(8:10, 10:12)
x <- n%*%m

#LA TRANSPUESTA DE LA MATRIZ 'x' SE OBTIENE CON 't(A)'
t(x)
##      [,1] [,2] [,3]
## [1,]   48   66   84
## [2,]   53   73   93
## [3,]   58   80  102

CARACTERES

  • En R, las cadenas de caracteres son vectores utilizados para nombrar objetos (Santana y Farfán 2014).

  • Un fragmento de texto se representa como una secuencia de caracteres (letras, números y símbolos) (Sánchez 2019).

persona <- c("Hugo", "Mario", "Luis")
meses<- c("Dic", "Feb", "Oct")
paises <- c("Brasil","Perú","Colombia")
gasesdeefec <- c( "CO2", "CH4" , "N2O", "CFC")

FACTORES

  • Un factor puede considerarse como una estructura de información, a la que se puede someter a algún tipo de procesamiento estadístico, cuyo núcleo son dos vectores: los niveles (levels) y un vector de índices enteros (Santana y Farfán 2014).

  • En R, se utilizan habitualmente para realizar clasificaciones de los datos, estableciendo su pertenencia a los grupos o categorías determinados por los levels (Santana y Nieves 2014).

  • Los niveles de un factor puede estar codificados como valores numéricos o como caracteres (Santana y Nieves 2014).

TRANSFORMAMOS EL VECTOR A FACTOR MEDIANTE LA FUNCIÓN ‘as.factor()’

sexo <- c("M", "H", "H", "M", "H", "H", "H", "M", "H", "M")
sexo <- as.factor(sexo) ; sexo
##  [1] M H H M H H H M H M
## Levels: H M

#COMO SE PUEDE VER EL NÚCLEO DE LA CLASE SON DOS VECTORES :
unclass(sexo)
##  [1] 2 1 1 2 1 1 1 2 1 2
## attr(,"levels")
## [1] "H" "M"

LA FUNCIÓM ‘table()’ NOS DA COMO RESULTADO LA FRECUENCIA DE APARICIÓN:

table(sexo)
## sexo
## H M 
## 6 4

SE PUEDE ESTABLECER UN ORDEN DETERMINADO DE LOS NIVELES:

mesdenac <- c("Dic", "Feb", "Oct", "Mar", "Feb", "Nov","Abr", "Dic", "Feb", "Oct")
meses <- c("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago", "Sep","Oct","Nov","Dic")

m <- factor(mesdenac, levels= meses) ; m
##  [1] Dic Feb Oct Mar Feb Nov Abr Dic Feb Oct
## Levels: Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic

levels(m)[2] <- "marzo" ; m
##  [1] Dic   marzo Oct   Mar   marzo Nov   Abr   Dic   marzo Oct  
## Levels: Ene marzo Mar Abr May Jun Jul Ago Sep Oct Nov Dic

LISTAS

  • Una lista es una clase de datos que puede contener cero o más elementos, cada uno de los cuales puede ser de una clase distinta (Santana y Farfán 2014).

  • Al igual que los vectores, los elementos de la lista pueden ser nombrados, lo que añade mayor claridad a su significado (Santana y Farfán 2014).

CONSTRUCCIÓN DE UNA LISTA QUE REPRESENTE UNA FAMILIA:

listfam<- list(hombre = "Juan", mujer = "Sonia", casados = TRUE, numero.hijos = 3, nombre.hijos=c('Hugo', 'Paco', 'Mary'))
listfam
## $hombre
## [1] "Juan"
## 
## $mujer
## [1] "Sonia"
## 
## $casados
## [1] TRUE
## 
## $numero.hijos
## [1] 3
## 
## $nombre.hijos
## [1] "Hugo" "Paco" "Mary"

UNA LISTA PUEDE CONTENER OTRA LISTA:

l1 <- list(nombre= "Marcos",nacimiento= 1986) ;  l2 <- list(nombre= "Juan", DNI = 46174852)
l3 <- list(l1,l2) ; l3
## [[1]]
## [[1]]$nombre
## [1] "Marcos"
## 
## [[1]]$nacimiento
## [1] 1986
## 
## 
## [[2]]
## [[2]]$nombre
## [1] "Juan"
## 
## [[2]]$DNI
## [1] 46174852

DATAFRAME

  • Un dataframe es una lista, cuyos componentes pueden ser vectores, matrices o factores, con la única salvedad de que las longitudes deben coincidir en todos los componentes (Santana y Farfán 2014).

  • La estructura de un dataframe es muy similar a la de una matriz, La diferencia es que una matriz sólo admite valores numéricos, mientras que en un dataframe podemos incluir también datos alfanuméricos (Santana y Nieves 2014).